# coding:utf-8
import xlrd
import xlwt
import os
from datetime import date, datetime

def read_excel():
    # 打开文件,如果不加formatting_info,则获取合并的单元格数组为空
    workbook = xlrd.open_workbook(r'F:\demo.xlsx', formatting_info=True)
    # 获取所有sheet
    print workbook.sheet_names()  # [u'sheet1', u'sheet2']
    sheet2_name = workbook.sheet_names()[1]

    # 根据sheet索引或者名称获取sheet内容
    sheet2 = workbook.sheet_by_index(1)  # sheet索引从0开始
    sheet2 = workbook.sheet_by_name('sheet2')

    # sheet的名称，行数，列数
    print sheet2.name, sheet2.nrows, sheet2.ncols

    # 获取整行和整列的值（数组）
    rows = sheet2.row_values(3)  # 获取第四行内容
    cols = sheet2.col_values(2)  # 获取第三列内容
    print rows
    print cols

    # 获取单元格内容
    print sheet2.cell(1, 0).value.encode('utf-8')
    print sheet2.cell_value(1, 0).encode('utf-8')
    print sheet2.row(1)[0].value.encode('utf-8')

    # 获取单元格内容的数据类型
    print sheet2.cell(1, 0).ctype
    # 读取excel中单元格内容为日期的方式
    if (sheet2.cell(1,0).ctype == 3):
      date_value = xlrd.xldate_as_tuple(sheet2.cell_value(rows,3),workbook.datemode)
      date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')

'''
获取行视图
根据Sheet序号获取该Sheet包含的所有行，返回值类似[ ['a', 'b', 'c'], ['1', '2', '3'] ]
sheetIndex指示sheet的索引，0表示第一个sheet，依次类推
xlsFilePath是Excel文件的相对或者绝对路径
'''
def getAllRowsBySheetIndex(sheetIndex, xlsFilePath):
    workBook =  xlrd.open_workbook(xlsFilePath)
    table = workBook.sheets()[sheetIndex]
    rows = []
    rowNum = table.nrows # 总共行数
    rowList = table.row_values
    for i in range(rowNum):
        rows.append(rowList(i)) # 等价于rows.append(i, rowLists(i))

    return rows
#得到最新上传的一个文件
def getLastExcelFile(base_dir):
    list = os.listdir(base_dir)
    time=0
    for i in range(0, len(list)):
        path = list[i]
        fullpath=os.path.join(base_dir,path)
        if os.path.getmtime(fullpath)>time:
            filename=path
            time=os.path.getmtime(fullpath)
    return filename
'''
获取某个Sheet的指定序号的行
sheetIndex从0开始
rowIndex从0开始
'''
def getRow(sheetIndex, rowIndex, xlsFilePath):
    rows = getAllRowsBySheetIndex(sheetIndex, xlsFilePath)

    return rows[rowIndex]


'''
获取列视图
根据Sheet序号获取该Sheet包含的所有列，返回值类似[ ['a', 'b', 'c'], ['1', '2', '3'] ]
sheetIndex指示sheet的索引，0表示第一个sheet，依次类推
xlsFilePath是Excel文件的相对或者绝对路径
'''
def getAllColsBySheetIndex(sheetIndex, xlsFilePath):
    workBook = xlrd.open_workbook(xlsFilePath)
    table = workBook.sheets()[sheetIndex]

    cols = []
    colNum = table.ncols # 总共列数
    colList = table.col_values
    for i in range(colNum):
        cols.append(colList(i))

    return cols


'''
获取某个Sheet的指定序号的列
sheetIndex从0开始
colIndex从0开始
'''
def getCol(sheetIndex, colIndex, xlsFilePath):
    cols = getAllColsBySheetIndex(sheetIndex, xlsFilePath)
    return cols[colIndex]


'''
获取指定sheet的指定行列的单元格中的值
'''
def getCellValue(sheetIndex, rowIndex, colIndex, xlsFilePath):
    workBook = xlrd.open_workbook(xlsFilePath)
    table = workBook.sheets()[sheetIndex]

    return table.cell(rowIndex, colIndex).value # 或者table.row(0)[0].value或者table.col(0)[0].value